
var util = require("./../util/util");
var jwt = require('jsonwebtoken');
var config = require('./../config/config')
/**
 * 用户类
 */
module.exports = function(sequelize, DataTypes) {
    let user = sequelize.define("user", {
        id: {
            type: DataTypes.INTEGER,
            allowNull: false, //非空
            autoIncrement: true, //自动递增
            primaryKey: true, //主键,

        },
        userName: {
            type: DataTypes.STRING,
            field: "userName",
            allowNull: false,
            //唯一的约束
            unique: true,
            validate:{
                notEmpty: true,
            }
        },
        password: {
            type: DataTypes.STRING,
            field: "password",
            allowNull: false,
            validate:{
                notEmpty: true,
            }
        },
        token: {
            type:DataTypes.STRING
        }
    }, {
        underscored: true, //额外字段以下划线来分割
        // createdAt: "created_at",
        // updatedAt: "updated_at",
        timestamps: true, //取消默认生成的createdAt、updatedAt字段
        freezeTableName: true, // Model 对应的表名将与model名相同
        //静态方法，即user模型自带的方法
        classMethods: classMethods,
        comment: "用户信息类",
        // paranoid: true      //虚拟删除
        //实例方法
        // instanceMethods: instanceMethods
    });


    user.register = function ( name, password, callback) {
        // Users exists with same email check
        console.log('开始查询')
        this.findOne({ where: {userName: name} }).then(user => {
            // project 将是 Project的一个实例，并具有在表中存为 id 123 条目的内容。
            // 如果没有定义这样的条目，你将获得null
            if(!user){
                this.create({
                    userName: name,
                    password: password
                }).then(result => {
                    if(result){
                        console.log('注册成功')
                        var token = jwt.sign({id:result.id}, config.jwt_secrets);
                        console.log(token)
                        callback(util.successResponse('注册成功',{token:token}))
                    }else {
                        callback(util.errorResponse('注册失败'))
                    }
                });

            }else {
                callback(util.errorResponse('账户已存在'))
            }
        })

    }


    user.login = function ( name, password, callback) {
        // Users exists with same email check
        console.log('开始查询')
        this.findOne({ where: {userName: name} }).then(user => {
            // project 将是 Project的一个实例，并具有在表中存为 id 123 条目的内容。
            // 如果没有定义这样的条目，你将获得null
            if(user && user.password == password){
                var token = jwt.sign({id:user.id}, config.jwt_secrets);
                callback(util.successResponse('登录成功',{token:token}))
            }else {
                callback(util.errorResponse('账号或密码错误'))
            }
        })

    }


    user.getUserInfo =  function (id, callback) {
        // Users exists with same email check
        console.log('开始查询')
        this.findOne({ where: {id: id} }).then(user => {
            // project 将是 Project的一个实例，并具有在表中存为 id 123 条目的内容。
            // 如果没有定义这样的条目，你将获得null
            if(user){
                callback(util.successResponse('成功',{userName:user.userName}))
            }else {
                callback(util.errorResponse('没有找到该用户信息'))
            }
        }).catch(reason => {
            console.log(reason)
        })

    }

    user.sync()

    return user
}





//静态方法
const classMethods = {
    //根据id查询
    getUserById: function(id) {
        return this.findById(id);
    },
    //获取所有
    getUsers: function(options) {
        return this.findAll(options);
    },
    //根据id更新数据
    updateUserById: function(values, id) {
        return this.update(values, {
            where: {
                id: id
            }
        });
    },
    //根据id删除数据
    deleteById: function(id) {
        return this.destroy({
            where: {
                id: id
            }
        })
    },

    register: function ( name, password ) {
        // Users exists with same email check
        console.log('开始查询')
        // const user = this.findOne({ where: { name } })
        //
        // console.log(user)
        // if (!user) {
        //     console.log('没找到用户')
        //     // User does not exists
        //     // const passwordHashed = await bcrypt.hash(password, serverConfig.saltRounds)
        //     return this.create({
        //         userName: name,
        //         password: password
        //     })
        // } else {
        //     console.log('找到用户')
        //     // User exists
        //     throw new Error(`The email ${ name } is already registered. Please try to login.`)
        // }
        return true
    }
}